[ Day 12]
說明:
在server服務中,很常需要做到定時排程這樣的任務,例如:每天晚上10點將資料送給a公司的file server,每天凌晨2點產生報表之類的需求。
雖然在js的世界中有setInterval這樣好用的function存在,但是它比較傾向於用來每隔X秒執行程式,而ㄋ要指定日期的話,使用node-schedule這類的排程器較為方便。(與java quartz, linux crontab相似)
一、安裝node-schedule
npm i node-schedule --save
二、使用crontab表示式執行
const schedule = require('node-schedule')
var taskFreq = '*/1 * * * *'
var sche = schedule.scheduleJob(taskFreq, () => {
console.log('now is :' + new Date)
})
透過scheduleJob這個方法,傳入要執行的時間(共5個*號,同linux crontab,最小單位為分鐘),
執行後方callback function。這裡以每分鐘印出現在時間為範例。
三、傳入確切時間執行
var execDate = new Date(2020,8,24,17,6,30)
var sche = schedule.scheduleJob(execDate, () => {
console.log('now is :' + new Date)
})
另外呢,也可以透過指定特定時間執行,需要傳入date物件。
要注意的是,月份必須-1才是當月月份(月份從0開始)
四、終止任務
var taskFreq = '*/1 * * * *'
var count = 0
var sche = schedule.scheduleJob(execDate, () => {
console.log('now is :' + new Date)
count += 1
if(count > 1) {
sche.cancel();
console.log('任務終止')
}
})
呼叫cancel方法可以停止該任務,這裡示範每分鐘執行1次,當執行兩次後停止任務。
[Day12結束]
later.js 也不錯用
它可以 Text Parser
// fires at 10:15am every day
var text1 = later.parse.text('at 10:15 am');
// fires every 5 minutes every day
var text2 = later.parse.text('every 5 mins');
感謝,有空來研究下差異